// 基于 axios 封装的请求模块
import axios from 'axios'
import { VUE_APP_BASE_URL } from '@/config'
import { getToken, setToken, getRefresToken, setRefreshToken } from './token'
import router from '../router'
import { refreshTokenAPI } from '@/api/user'
// import { localeData } from 'moment'
// 新建一个新的axios实例
const request = axios.create({
  baseURL: VUE_APP_BASE_URL// 基地址
})
// 添加请求拦截器
request.interceptors.request.use(config => {
  const token = getToken()
  const refreshtoken = getRefresToken()

  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  } else if (refreshtoken) {
    config.headers.Authorization = `Bearer ${refreshtoken}`
  }
  return config
}, error => {
  return Promise.reject(error)
})
// 添加响应拦截器

request.interceptors.response.use(resp => { // 当状态码为2xx/3xx开头的进这里
  // 对响应数据做点什么
  return resp.data
}, async error => { // 响应状态码4xx/5xx进这里
  // 对响应错误做点什么
  console.dir(error)
  console.log(error)
  // if (error.response.status === 401) { // 身份过期
  // token续签方式1:  去登录页重新登录, token无用, 清掉-确保路由守卫if进不去
  // store.commit('setToken', '')
  // router.push({ path: '/login' }) }
  //   tonken过期处理
  if (error.response.data.message === 'refressh_token失效') {
    setToken('')
    setRefreshToken('')
    // router.replace('/login')
    // router实例对象上的属性
    router.replace(`/login?redirect=${router.currentRouter.path}`)
  }
  // 2小时过期处理
  if (error.response.status === 401) {
    setToken('')
    const res = await refreshTokenAPI()
    setToken(res.data.token)
  }

  return Promise.reject(error)
})

// 导出自定义函数
export default request
